#pragma once
#include<deque>
namespace hy
{
    template<class T, class Con = std::deque<T>>
    class stack
    {
    public:
        stack() {}
        void push(const T& x) { _con.push_back(x); }
        void pop() { _con.pop_back(); }
        T& top() { return _con.back(); }
        const T& top()const { return _con.back(); }
        size_t size()const { return _con.size(); }
        bool empty()const { return _con.empty(); }
    private:
        Con _con;
    };

    template<class T, class Con = std::deque<T>>
    class queue
    {
    public:
        queue() {}
        void push(const T& x) { _con.push_back(x); }
        void pop() { _con.pop_front(); }
        T& back() { return _con.back(); }
        const T& back()const { return _con.back(); }
        T& front() { return _con.front(); }
        const T& front()const { return _con.front(); }
        size_t size()const { return _con.size(); }
        bool empty()const { return _con.empty(); }
    private:
        Con _con;
    };

};